package com.chat.netty.websocketserver.vo;

import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.group.ChannelGroup;
import io.netty.channel.group.DefaultChannelGroup;
import io.netty.handler.codec.http.websocketx.WebSocketServerHandshaker;
import io.netty.util.concurrent.GlobalEventExecutor;

import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 描述: 全局常量
 *      1. USER_TOKEN 用户认证的键，用来匹配http session中的对应userId；
 *      2. webSocketServerHandshaker表，用channelId为键，存放握手实例。用来响应CloseWebSocketFrame的请求；
 *      3. onlineUser表，用userId为键，存放在线的客户端连接上下文；
 *      4. groupInfo表，用groupId为键，存放群信息；
 *      5. userInfo表，用username为键，存放用户信息。
 * @author Kanarien
 * @version 1.0
 * @date 2018年5月18日 下午9:17:35
 */
public class NettyConstant {

    public static Map<String, WebSocketServerHandshaker> webSocketHandshakerMap =
            new ConcurrentHashMap<>();

	public static Map<String, ChannelHandlerContext> onlineUserMap =
	        new ConcurrentHashMap<>();

	public static Map<String, String> onlineUsers =
			new HashMap<>();

	public static Map<String,GroupInfo> groupInfoMap =
			new ConcurrentHashMap<>();

	/**
	 * 定义一个channel组，管理所有的channel
	 * GlobalEventExecutor.INSTANCE 是全局的事件执行器，是一个单例
	 */
	public static ChannelGroup channelGroup = new DefaultChannelGroup(GlobalEventExecutor.INSTANCE);

	/**
	 * 获取channel组
	 * @return
	 */
	public static ChannelGroup getChannelGroup() {
		return channelGroup;
	}

}
